package org.example.onlinejudge.config;

import org.example.onlinejudge.repository.PermissionRepository;
import org.example.onlinejudge.repository.RoleRepository;
import org.example.onlinejudge.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

/**
 * 数据初始化检查类
 * 负责在应用启动时检查数据库初始化状态
 * 实现逻辑：
 * 1. 检查角色、权限和用户数据表是否为空
 * 2. 检查管理员账号是否存在
 * 3. 根据检查结果提供初始化指导或系统就绪提示
 * 所有基础数据通过SQL脚本创建：init_rbac.sql
 */
@Component
public class DataInitializer implements CommandLineRunner {

    @Autowired
    private RoleRepository roleRepository;

    @Autowired
    private PermissionRepository permissionRepository;

    @Autowired
    private UserRepository userRepository;

    @Override
    public void run(String... args) throws Exception {
        System.out.println("\n╔════════════════════════════════════════════════════════════╗");
        System.out.println("║          在线判题系统 - 数据库状态检查                      ║");
        System.out.println("╚════════════════════════════════════════════════════════════╝");

        // 检查角色数据
        long roleCount = roleRepository.count();
        System.out.println("✓ 角色数量: " + roleCount + " 个");
        if (roleCount == 0) {
            System.err.println("⚠ 警告：角色数据为空，请执行 init_rbac.sql 脚本！");
        }

        // 检查权限数据
        long permCount = permissionRepository.count();
        System.out.println("✓ 权限数量: " + permCount + " 个");
        if (permCount == 0) {
            System.err.println("⚠ 警告：权限数据为空，请执行 init_rbac.sql 脚本！");
        }

        // 检查用户数据
        long userCount = userRepository.count();
        System.out.println("✓ 用户数量: " + userCount + " 个");
        if (userCount == 0) {
            System.err.println("⚠ 警告：用户数据为空，请执行 init_rbac.sql 脚本！");
        }

        // 检查管理员账号
        boolean adminExists = userRepository.existsByUsername("admin");
        if (adminExists) {
            System.out.println("✓ 管理员账号: admin (密码: 123456)");
        } else {
            System.err.println("⚠ 警告：管理员账号不存在，请执行 init_rbac.sql 脚本！");
        }

        System.out.println("\n" + (roleCount > 0 && permCount > 0 && userCount > 0 
            ? "✅ 数据库初始化状态：正常" 
            : "❌ 数据库初始化状态：需要初始化"));
        
        if (roleCount == 0 || permCount == 0 || userCount == 0) {
            System.out.println("\n📝 初始化步骤：");
            System.out.println("   1. 确保MySQL服务正在运行");
            System.out.println("   2. 执行命令：mysql -u root -p < src/main/resources/sql/init_rbac.sql");
            System.out.println("   3. 重新启动应用");
        } else {
            System.out.println("\n🚀 系统就绪，可以开始使用！");
            System.out.println("   访问：http://localhost:8080");
            System.out.println("   账号：admin / 123456");
        }
        
        System.out.println("════════════════════════════════════════════════════════════\n");
    }
}

